package user_handler

import (
	"peilian-api/app/global/bind"
	"peilian-api/app/model"
	"peilian-api/app/services/user_service"
	"peilian-api/utils/format"

	"github.com/gin-gonic/gin"
)

// 后台管理员设置 -- 添加用户信息
func AddManage(ctx *gin.Context) {
	// 绑定参数
	var ar user_service.AddManageRequest
	if err := bind.ShouldBinding(ctx, &ar); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}

	err := new(user_service.AdminService).AddManage(ctx, ar)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).Success(make([]interface{}, 0))
}

// 更新用户信息
func UpdateManage(ctx *gin.Context) {
	// 绑定参数 使用添加用户名信息
	var ar user_service.UpdateManageRequest
	if err := bind.ShouldBinding(ctx, &ar); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	id := ar.Id
	err := user_service.UpdateManage(ctx, id, ar)
	if err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Error())
		return
	}
	format.NewResponseJson(ctx).Success(make([]interface{}, 0))
}

// 删除用户信息
func DeleteByIdManage(ctx *gin.Context) {
	var ud user_service.DeleteManageRequest
	if err := bind.ShouldBinding(ctx, &ud); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	err := user_service.DeleteByIdManage(ctx, ud.Id)
	if err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	format.NewResponseJson(ctx).Success(make([]interface{}, 0))
}

// 查询用户信息
func GetManage(ctx *gin.Context) {
	var gr user_service.GetManageRequest
	if err := bind.ShouldBinding(ctx, &gr); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	count, out, err := user_service.GetUserInfoManage(ctx, gr)
	if err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessDataList(int(count), out)
}

// 忘记密码
func Retrieve(ctx *gin.Context) {
	var fp model.ForgetPasswordReq
	if err := bind.ShouldBinding(ctx, &fp); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	if err := user_service.AccountRetrieve(ctx, fp); err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(struct{}{})
}

// 重置密码
func UpdatePassword(ctx *gin.Context) {
	var up model.UpdatePasswordReq
	if err := bind.ShouldBinding(ctx, &up); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	if err := user_service.UpdatePassword(ctx, up); err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(struct{}{})
}
